#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

struct node{
    ll pos;
    vector<int> pass;
};

bool smaller(const vector<int>& a,const vector<int>& b){
    for(int i=0;i<a.size();i++){
        if(a[i]==b[i])continue;
        return a[i]<b[i];
    }
}

vector<int> res;
void bfs(vector<vector<int>> adj,int x,int y){
    vector<bool> vis(adj.size(),false);
    node st;
    st.pos=x;
    st.pass.push_back(x);
    queue<node> q;
    q.push(st);
    while(!q.empty()){
        node p=q.front();
        q.pop();
        vis[p.pos]=true;
        if(p.pos==y){
            if(res.empty())res=p.pass;
            else if(smaller(p.pass,res))res=p.pass;
        }
        sort(adj[p.pos].begin(),adj[p.pos].end());
        for(int i=0;i<adj[p.pos].size();i++){
            bool in=false;
            for(int x:p.pass){
                if(x==adj[p.pos][i]){
                    in=true;
                    break;
                }
            }
            if(in) continue;
            node temp=p;
            temp.pass.push_back(adj[p.pos][i]);
            temp.pos=adj[p.pos][i];
            q.push(temp);
        }
        vis[p.pos]=true;
    }
}

void solve(){
    int n,m,x,y;
    cin>>n>>m>>x>>y;
    vector<vector<int>> adj(n+1);
    for(int i=0;i<m;i++){
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    bfs(adj,x,y);
    for(int x:res){
        cout<<x<<' ';
    }
    cout<<'\n';
    res.clear();
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }

}